package cn.desk.commons.util;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ClassUtil {

	public static final Logger logger = LoggerFactory
			.getLogger(ClassUtil.class);

	public static void buildProperty(Object t, Class<?> clazz,
			Map<String, Object> map) {
		logger.debug("property start");
		if (clazz.equals(Object.class)) {
			return;
		}
		Field fs[] = clazz.getDeclaredFields();
//		PropertyDescriptor pd;
//		Method reader;
		for (Field f : fs) {
			try {
				if ((f.getModifiers() & Modifier.FINAL) == Modifier.FINAL) {
					continue;
				}
				f.setAccessible(true);
				// pd = new PropertyDescriptor(f.getName(), clazz);
				// reader = pd.getReadMethod();

				Object o = f.get(t);
				logger.info(f.getName() + "=" + String.valueOf(o));
				if (o instanceof String && !"".equals(o)) {
					map.put(f.getName(), o);
				} else {
					map.put(f.getName(), o);
				}
			} catch (IllegalArgumentException e) {
				logger.error(e.getMessage(), e);
			} catch (IllegalAccessException e) {
				logger.error(e.getMessage(), e);
			}
			// catch (IntrospectionException e) {
			// logger.error(e.getMessage(), e);
			// } catch (InvocationTargetException e) {
			// logger.error(e.getMessage(), e);
			// }
		}
		Class<?> superClass = clazz.getSuperclass();
		buildProperty(t, superClass, map);
		logger.debug("property end");
	}
}
